(define-struct Person (name year kids)) (define Bart (make-Person 'Bart 1979 empty)) (define Lisa (make-Person 'Lisa 1981 empty)) (define Maggie (make-Person 'Maggie 1988 empty)) (define Homer (make-Person 'Homer 1955 (list Bart Lisa Maggie))) (define Marge (make-Person 'Marge 1956 (list Bart Lisa Maggie))) (define Selma (make-Person 'Selma 1950 empty)) (define Patty (make-Person 'Patty 1950 empty)) (define Jackie (make-Person 'Jackie 1926 (list Selma Patty Marge))) (define Herbert (make-Person 'Herbert 1950 empty)) (define Mona (make-Person 'Mona 1929 (list Herbert Homer))) (define Abe (make-Person 'Abe 1920 (list Herbert Homer))) Abe ;; Person->string: Person -> string (duh!) ;; Return the string representation of a-p, as described in lab06.html ;; (define (Person->string a-p) (Person->string-help a-p "")) ; bullet: string ; What to put in front of each name ; (define bullet "-") ; generation-indent: string ; How to indent each succeeding generation. ; ;(define generation-indent " |") (define generation-indent ; A more complicated version: a long bullet requires more generation-indent. (string-append (make-string (string-length bullet) #\space) " |")) ;; Person->string-help: Person, string -> string ;; Return the string representation of "a-p", except that ;; each line is prepended with "prefix". ;; (define (Person->string-help a-p prefix) (string-append prefix bullet (symbol->string (Person-name a-p)) " (b. " (number->string (Person-year a-p)) ")" newline (Persons->string (Person-kids a-p) (string-append prefix generation-indent)))) ;; Persons->string: list-of-person string --> string ;; Return the string representation of everybody in "people", ;; all concatenated into a single string, ;; with each line prepended by "prefix". ;; (define (Persons->string people prefix) (cond [(empty? people) ""] [(cons? people) (string-append (Person->string-help (first people) prefix) (Persons->string (rest people) prefix))])) (display-string (Persons->string empty "tra")) (display-string (Persons->string (list Bart) "lala")) (display-string (Person->string Bart)) (display-string (Persons->string (list Bart Lisa Maggie) "tra")) (display-string (Person->string Marge)) (display-string (Person->string Jackie))